package com.example;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;

public class FlowUtils {

    /**
     * 通过nodeId,找到对应的子id
     * @param jsonData json数据
     * @param id       nodeId
     * @return
     */
    public static JSONObject findNodeById(JSONObject jsonData, String id) {
        try {

            if (jsonData.containsKey("nodeId")){
                if(jsonData.getString("nodeId").equals(id)) {
                    return jsonData;
                }
            }

            if (jsonData.containsKey("conditionNodes")) {
                JSONArray conditionNodes = jsonData.getJSONArray("conditionNodes");
                for (int i = 0; i < conditionNodes.size(); i++) {
                    JSONObject node = conditionNodes.getJSONObject(i);
                    JSONObject result = findNodeById(node, id);
                    if (result != null) {
                        return result;
                    }
                }
            }

            if (jsonData.containsKey("childNode")) {
                return findNodeById(jsonData.getJSONObject("childNode"), id);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 将层级数据变为 列表数据
     * @param jsonData jsonData数据
     * @return
     */
    public static JSONArray extractNodes(String jsonData) {
        JSONArray result = new JSONArray();

        try {
            // 解析传入的 JSON 数据
            JSONObject jsonObj = JSONObject.parseObject(jsonData);

            // 提取根节点信息
            JSONObject rootNode = jsonObj.getJSONObject("nodeConfig");
            extractNodeInfo(rootNode, null, result);

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return result;
    }

    private static void extractNodeInfo(JSONObject node, String parentNodeId, JSONArray result) throws JSONException {
        // 提取当前节点信息
        String nodeId = node.getString("nodeId");
        String nodeName = node.getString("nodeName");
        Integer nodeType=node.getInteger("type");
        // 构建当前节点信息的 JSON 对象
        JSONObject currentNode = new JSONObject();
        currentNode.put("nodeId", nodeId);
        currentNode.put("nodeName", nodeName);
        currentNode.put("parentNode", parentNodeId);
        currentNode.put("type",nodeType);

        // 将当前节点信息添加到结果数组中
        result.add(currentNode);

        // 处理子节点信息
        if (node.containsKey("childNode")) {
            JSONObject childNode = node.getJSONObject("childNode");
            extractNodeInfo(childNode, nodeId, result);
        }

        if (node.containsKey("conditionNodes")) {
            JSONArray conditionNodes = node.getJSONArray("conditionNodes");
            for (int i = 0; i < conditionNodes.size(); i++) {
                JSONObject conditionNode = conditionNodes.getJSONObject(i);
                extractNodeInfo(conditionNode, nodeId, result);
            }
        }
    }


}
